;8个LED依次循环流水
;连线说明：D3区：CS、A0、A1 -- A3区：CS1、A0、A1
;D3区：JP23（PA） -- F4区：JP18
PA_8255 EQU 0270H
PB_8255 EQU 0271H
PC_8255 EQU 0272H
MODE_8255 EQU 0273H
_STACK SEGMENT  STACK
  DW  64  DUP(?)
_STACK  ENDS

CODE  SEGMENT
        ASSUME CS:CODE,SS: _STACK
START:  CLC                     ;
        MOV  AL,82H             ;方式0，AC输出
        MOV  DX,MODE_8255       ;
        OUT  DX,AL              ;写控制字
        MOV  AL,0FEH            ;设置控制字80H
CONT:   MOV  DX,PA_8255         ;点亮L1
        OUT  DX,AL              ;点亮L1
        CALL DELAY              ;延时等待
        PUSH AX                 ;保存当前流水灯状态数据
        MOV  DX,PB_8255
        IN   AL,DX              ;读入PB口控制开关状态
        TEST AL,01H             ;测试PB0控制端口电平高低
        JZ   A1                 ;低电平则循环左移
        POP  AX                 ;弹出流水灯状态
        ROR  AL,01H             ;循环右移
        JMP  CONT               ;循环
A1:     POP  AX                 ;弹出流水灯状态
        ROL  AL,01H             ;循环左移
        JMP  CONT               ;循环
DELAY  PROC                     ;延时子程序
        PUSH BX                 ;保护寄存器BX
        PUSH CX                 ;保护CX
        MOV  BL,0FFH            ;第一层循环FFH次
NEXT:   MOV  CX,3999H           ;第二层嵌套循环3999H次
WAIT1:  LOOP WAIT1              ;
        DEC  BL                 ;
        JNZ  NEXT               ;
        POP  CX                 ;
        POP  BX                 ;
        RET                     ;
DELAY   ENDP
CODE    ENDS
        END START